package baseObject;

public abstract class RectObj implements IRectObj{

	private int x;
	private int y;
	private int width;
	private int height;
	
	/**
	 * Construit un RectObj qui est la base de tout dans ce jeu.
	 * @param x : les coordonnées de l'objet en x
	 * @param y : ses coordonnées en y
	 */
	public RectObj(int x, int y, int width, int height){
		this.init(x, y, width, height);
	}
	
	/**
	 * Initialiseur appelé par le constructeur
	 */
	@Override
	public void init(int x, int y, int width, int height) {
		this.x = x;
		this.y = y;	
		this.width = width;
		this.height = height;
	}

	/**
	 * Vérifie si le RectObj touche un autre RectObj.
	 * @return : true si les 2 objets partagent les même coordonnées
	 */
	@Override
	public boolean isAffectedBy(IRectObj ro) {
		if(ro.getX() >= this.getX() && ro.getX() <= this.getX() + this.getWidth()){
			if(ro.getY() >= this.getY() && ro.getY() <= this.getY() + this.getHeight()){
				return true;
			}
		}
		return false;
	}

	/**
	 * Retourne l'endroit où a été frappé le RectObj. Il peut avoir été 
	 * frappé vers le haut, vers le bas, vers la gauche, vers la droite.
	 * @return : l'endroit frappé
	 */
	@Override
	public eHitType getHitState(IBall ball) {
		if(!this.isAffectedBy(ball))
			return eHitType.NO;
		if(ball.getDeltaX() == -1)
			return eHitType.LEFT;		
		if(ball.getDeltaX() == +1)
			return eHitType.RIGHT;
		if(ball.getDeltaY() == +1)
			return eHitType.UP;
		if(ball.getDeltaY() == -1)
			return eHitType.DOWN;
		
		return eHitType.NO;
	}

	/**
	 * Accesseur vers la position en x du RectObj
	 * @return : la position en x
	 */
	public int getX() {
		return x;
	}

	/**
	 * Accesseur vers la position en y du RectObj
	 * @return : la position en y
	 */
	public int getY() {
		return y;
	}

	public int getWidth() {
		return width;
	}

	public int getHeight() {
		return height;
	}

	/**
	 * Permet de redéfinir les coordonnées de l'objet.
	 * @param x : la position en x
	 * @param y : la position en y
	 */
	public void setCoord(int x, int y) {
		this.x = x;
		this.y = y;
	}

}
